package com.mashuai.utils.toolkit.core.msCollection;

import com.mashuai.utils.toolkit.achieve.MsExegesis;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 集合相关工具类
 *
 * @ClassName: MsCollectUtils
 * @Author : mashuai
 * @Description: TODO
 */
@MsExegesis("集合相关工具类")
public class MsCollectUtils {
    //创建默认的集合
    public static final List DEF_LIST = new ArrayList<>();
    public static final Map DEF_MAP = new HashMap<>();

    /***
     * 对hashmap的某个key进行排序
     *
     * @param hashMap
     * @param comparator 自定义的排序规则
     * @return:
     * @author:mashuai
     */
    @MsExegesis("对hashmap的某个key进行排序")
    public static <T> Map<String, T> sortKeyHashMap(Map<String, T> hashMap, Comparator<Map.Entry<String, T>> comparator) {
        return hashMap.entrySet()
                .stream()
                .sorted(comparator) // 自定义排序规则
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));// 保留排序顺序
    }


    /**
     * 把一个list集合，按照指定len拆分。
     * 一般可以用于一个大的list，把他拆分成len组，每组单独丢入线程池中执行
     *
     * @param list
     * @param len
     * @return List<List>
     * @author mashuai
     */
    @MsExegesis("把一个list集合，按照指定len拆分。 一般可以用于一个大的list，把他拆分成len组，每组单独丢入线程池中执行")
    public static <T> List<List<T>> splitList(List<T> list, int len) {
        if (list == null || list.isEmpty() || len < 1) {
            return Collections.emptyList();
        }
        List<List<T>> result = new ArrayList<>();
        int size = list.size();
        int count = (size + len - 1) / len;
        for (int i = 0; i < count; i++) {
            List<T> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
            result.add(subList);
        }
        return result;
    }
}
